import { Notification } from 'element-ui'

export function IEVersion() {
  var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
  var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
  var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
  if (isIE) {
    var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
    reIE.test(userAgent);
    var fIEVersion = parseFloat(RegExp["$1"]);
    if (fIEVersion == 7) {
      return 7;
    } else if (fIEVersion == 8) {
      return 8;
    } else if (fIEVersion == 9) {
      return 9;
    } else if (fIEVersion == 10) {
      return 10;
    } else {
      return 6;//IE版本<=7
    }
  } else if (isEdge) {
    return 'edge';//edge
  } else if (isIE11) {
    return 11; //IE11
  } else {
    return -1;//不是ie浏览器
  }
}

/**
 * @description 根据枚举列表查询当需要的数据（如果指定了 label 和 value 的 key值，会自动识别格式化）
 * @param {String} callValue 当前单元格值
 * @param {Array} enumData 枚举列表
 * @param {String} type 过滤类型（目前只有 tag）
 * @return string
 * */
export function filterEnum(
  callValue,
  enumData,
  searchProps,
  type,
) {
  const value = searchProps?.value ?? 'value'
  const label = searchProps?.label ?? 'label'
  let filterData = {}
  if (Array.isArray(enumData))
    filterData = enumData.find((item) => item[value] === callValue)
  if (type === 'tag')
    return filterData?.tagType ? filterData.tagType : ''
  return filterData ? filterData[label] : '--'
}

/**
 * @description 处理无数据情况
 * @param {String} callValue 需要处理的值
 * @return string
 * */
export function formatValue(callValue) {
  // 如果当前值为数组,使用 / 拼接（根据需求自定义）
  if (Array.isArray(callValue))
    return callValue.length ? callValue.join(' / ') : '--'
  return callValue ?? '--'
}

/**
 * @description 处理 prop 为多级嵌套的情况(列如: prop:user.name)
 * @param {Object} row 当前行数据
 * @param {String} prop 当前 prop
 * @return any
 * */
export function handleRowAccordingToProp(row, prop) {
  if (!prop.includes('.'))
    return row[prop]
  prop.split('.').forEach((item) => {
    row = row[item] ?? '--'
  })
  return row
}


/**
 * base64转excel
 * @param data base64数据
 * @param name excel名字
 */
export function base64ToExcel(data, name) {
  Notification({
    title: '温馨提示',
    message: '如果数据庞大会导致下载缓慢哦，请您耐心等待！',
    type: 'info',
    duration: 3000,
  })
  const raw = window.atob(data)
  const uInt8Array = new Uint8Array(raw.length)
  for (let i = 0; i < raw.length; i++)
    uInt8Array[i] = raw.charCodeAt(i)

  const link = document.createElement('a')
  const blob = new Blob([uInt8Array], {
    type: 'application/vnd.ms-excel',
  })

  link.style.display = 'none'
  link.href = URL.createObjectURL(blob)
  link.setAttribute('download', `${name}.xls`)

  document.body.appendChild(link)
  link.click()

  document.body.removeChild(link)
}
